import { hasPermission, hasAnyPermission, hasAllPermissions } from '@/utils/permission'

/**
 * 权限指令
 * 使用示例：
 * 1. 单个权限： v-permission="'user:add'"
 * 2. 多个权限(满足任一权限)： v-permission="{ any: ['user:add', 'user:edit'] }"
 * 3. 多个权限(必须同时满足所有权限)： v-permission="{ all: ['user:view', 'user:edit'] }"
 */
export default {
  inserted(el, binding, vnode) {
    checkPermission(el, binding)
  },
  
  // 在组件更新时也进行权限检查
  update(el, binding, vnode) {
    checkPermission(el, binding)
  }
}

// 权限检查方法
function checkPermission(el, binding) {
    const { value } = binding
    
    if (!value) {
    return
    }
    
    let hasAuth = false
    
    if (typeof value === 'string') {
      // 单个权限
      hasAuth = hasPermission(value)
    } else if (value.any) {
      // 满足任一权限
      hasAuth = hasAnyPermission(value.any)
    } else if (value.all) {
      // 满足所有权限
      hasAuth = hasAllPermissions(value.all)
    }
    
    if (!hasAuth) {
    // 没有权限，隐藏元素
      el.style.display = 'none'
      el.disabled = true
      el.style.pointerEvents = 'none'
  } else {
    // 有权限，显示元素
    el.style.display = ''
    el.disabled = false
    el.style.pointerEvents = ''
  }
} 